'use strict';

// 字符串遍历 for...of
function strIterator() {
    var _iteratorNormalCompletion = true;
    var _didIteratorError = false;
    var _iteratorError = undefined;

    try {
        for (var _iterator = 'foo'[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
            var _cp = _step.value;

            console.log(_cp); // f o o
        }
        // for...of 遍历器最大的优点是可以识别大于0xFFFF的码点，传统的for循环无法识别这样的码点。
    } catch (err) {
        _didIteratorError = true;
        _iteratorError = err;
    } finally {
        try {
            if (!_iteratorNormalCompletion && _iterator.return) {
                _iterator.return();
            }
        } finally {
            if (_didIteratorError) {
                throw _iteratorError;
            }
        }
    }

    var text = String.fromCodePoint(0x20BB7);

    for (var i = 0; i < text.length; i++) {
        console.log(text[i]);
    }
    // " "
    // " "
    var _iteratorNormalCompletion2 = true;
    var _didIteratorError2 = false;
    var _iteratorError2 = undefined;

    try {
        for (var _iterator2 = text[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
            var _i = _step2.value;

            console.log(_i);
        }
        // "𠮷"
    } catch (err) {
        _didIteratorError2 = true;
        _iteratorError2 = err;
    } finally {
        try {
            if (!_iteratorNormalCompletion2 && _iterator2.return) {
                _iterator2.return();
            }
        } finally {
            if (_didIteratorError2) {
                throw _iteratorError2;
            }
        }
    }

    for (var cp in 'foo') {
        console.log(cp); // 0 1 2
    }
    // 上面代码中，字符串text只有一个字符，但是for循环会认为它包含两个字符（都不可打印），而for...of循环会正确识别出这一个字符。
}

// charAt
function ca() {
    console.log('abc'.charAt(0));
    '𠮷'.charAt(0); // "\uD842"
    // charAt方法返回的是UTF-16编码的第一个字节，实际上是无法显示的。
    // 字符串实例的at方法，可以识别Unicode编号大于0xFFFF的字符，返回正确的字符。
    'abc'.at(0);
}

// includes, startsWith, endsWith
function ise() {
    console.log('abc'.includes('ab'));
    console.log('abc'.startsWith('a'));
    console.log('abc'.endsWith('c0'));
    console.log('abc'.startsWith('b', 1)); // true
    // 这三个方法都支持第二个参数，表示开始进行搜索的位置；
}

function rep() {
    'x'.repeat(3); // "xxx"
    'hello'.repeat(2); // "hellohello"
    'na'.repeat(0); // ""
    // 如果参数是小数，则会被取整，如果是负数，则会报错；
}

console.log(str);


